Configurable compressor for encryption, Rack 3 streaming and more | This Week in Rails
ActiveRecordに関する変更です
encrypts メソッドで圧縮アルゴリズムを指定できるようになりました
code:rb
module ZstdCompressor
def self.deflate(data)
Zstd.compress(data)
end
def self.inflate(data)
Zstd.decompress(data)
end
end
class User
encrypts :name, compressor: ZstdCompressor
end
このときは ActiveRecord::Encryption::Encryptor のインスタンスを初期化するときに圧縮するかどうかをbooleanで指定できるようになった、という話をしました
今回は独自の圧縮アルゴリズムを実装してオプションで指定できるようになった、というお話でした
ActionControllerに関する変更です
通常、Railsにおけるviewのレンダリングは、まずテンプレートがレンダリングされ、そのあとレイアウトがレンダリングされ、レイアウトを含む全ての表示が準備されたのちにクライアントにレスポンスを返します
一方Streamingでは、まずレイアウトをレンダリングし、そのあとの処理に応じてテンプレートの各部分をレンダリングします。つまり、通常とは逆の順番でレンダリングされるということです
Streamingは、Railsで大規模なデータセットを扱う場合や長時間かかる処理を行う場合に有用な機能です
code:rb
def dashboard
# Allow lazy execution of the queries
@posts = Post.all
@pages = Page.all
@articles = Article.all
render stream: true
end
従来のRailsでは ActionController::Streaming モジュールでStreamingに関する処理を実装していましたが、Rack 3でStreamingに関する機能が増えたため、モジュール内の実装の一部を削除し、Rackの機能を使用する形に変更が行なわれています
ActionPackに関する変更です
この仕組みは config.action_dispatch.strict_freshness が true の場合に有効になります
以前のバージョンの Rails との互換性を維持するためにデフォルトでは false に設定されていますが、Rails8系ではデフォルトで true に設定されます